package com.b2mining.daemons;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Vector;

import org.apache.log4j.Logger;

import com.b2mining.integration.beans.Empresa;
import com.b2mining.integration.helper.Constantes;
import com.b2mining.integration.helper.Helper;

/*
 * Clase encargada de detectar si hay algun archivo de texto
 *  * @author Ebiz Latin America <BR>
 * */

public class TXTController extends Thread{
	
	Logger log = Logger.getLogger(this.getClass());
	static String propertiesName = "properties.ini";
	static int tiempoEspera;
	static Vector estructuraDirectorios = new Vector();
	static Vector listaCarpetasRUCCompradores = new Vector();
	static String empresa="";
	final static String TIEMPO_KEY = "tiempo_espera_file";
	private static TXTController controller;
	
	void readProperties(String fileName) throws IOException {
	        Empresa auxemp;
				        	estructuraDirectorios.addElement(new String (Constantes.DIR_INPUT + Constantes.DIR_DETRACCIONES));
							estructuraDirectorios.addElement(new String (Constantes.DIR_INPUT + Constantes.DIR_RETENCIONES));
							estructuraDirectorios.addElement(new String (Constantes.DIR_INPUT + Constantes.DIR_FACTURAS));							
							for(int ttt=0;ttt<estructuraDirectorios.size();ttt++){
					        	log.debug("estructuraDirectorios despues de .addelement" + estructuraDirectorios.get(ttt));
					        }
							for(int kl=0;kl<IntegracionSFTPMultiempresa.empresas.size();kl++){
					        	auxemp=((Empresa)IntegracionSFTPMultiempresa.empresas.get(kl));
					        	empresa = auxemp.getRAZONSOCIAL().toString();
					        	log.debug("Valor de empresa despues de la asignacion ["+kl+"]: "+empresa);
							    ((Empresa)IntegracionSFTPMultiempresa.empresas.get(kl)).setCarpetasEmp(estructuraDirectorios);		
							}
				tiempoEspera = Helper.tiempo_espera_file;
	}
	
	/**
	 */
	public TXTController() {
		super();
	}
	/**
	 * @param target java.lang.Runnable
	 */
	public TXTController(Runnable target) {
		super(target);
	}
	/**
	 * @param target java.lang.Runnable
	 * @param name java.lang.String
	 */
	public TXTController(Runnable target, String name) {
		super(target, name);
	}
	/**
	 * @param name java.lang.String
	 */
	public TXTController(String name) {
		super(name);
	}
	public static TXTController getInstance(String name){
        if(controller==null){
             controller = new TXTController(name);
        }
        return controller;
   }
	/**
	 * Starts the application.
	 * @param args an array of command-line arguments
	 */
	/*public static void main(java.lang.String[] args) {
		// Insert code to start the application here.
		TXTController tc = new TXTController("Lectura de archivos txt");
		tc.start();
	}*/

	/*** AGREGADO POR RHANDY PARA BBVA 06-04-2010 ****/
	public static void crearCarpetasContenedoras(String directorioOrigen2) {
		Logger log = Logger.getLogger(TXTController.class);
		File nuevo = new File(directorioOrigen2);
		log.debug("1 CREAR CARPETAS *************  " + directorioOrigen2);
			String directorio = directorioOrigen2;
				for(int numemp=0;numemp<IntegracionSFTPMultiempresa.empresas.size();numemp++){
					String dirempresas=((Empresa) IntegracionSFTPMultiempresa.empresas.get(numemp)).getRAZONSOCIAL().toString();
					log.info("Listado de Empresas configuradas : "+dirempresas);
					String dirxml=Helper.getRutaarchivoxml();
					String directories[] = {"\\SALIDA","\\ENTRADA","\\PROCESADO","\\ERROR"};
					String subDirectories[] = {"\\FACTURAS","\\RETENCIONES","\\DETRACCIONES","\\DESCONOCIDOS"};
					String otro="\\OTROS";
					nuevo=new File(directorioOrigen2+dirempresas);
					log.debug("2 CREANDO CARPETAS POR EMPRESA ************" + nuevo.toString());
					nuevo.mkdir();
					for(int i=0; i<directories.length; i++){
						nuevo = new File(directorio+dirempresas+directories[i]);
						log.debug("3 CREANDO CARPETAS PRINCIPALES ************" + nuevo.toString());
						nuevo.mkdir();
						for(int j=0; j<subDirectories.length; j++){
							nuevo = new File(directorio+dirempresas+directories[i]+subDirectories[j]);
							log.debug("4 CREANDO SUBDIRECTORIO ************ "+nuevo.toString());
							nuevo.mkdir();
						}
					}
					
					for(int q=0; q<subDirectories.length; q++){
						nuevo=new File(directorio+dirempresas+directories[2]+subDirectories[q]+otro);
						log.debug("5 CREANDO CARPETA OTROS PARA FILTRO DE PROVEEDORES ************" + nuevo.toString());
						nuevo.mkdir();
					}
					
					nuevo = new File(dirxml);
					log.debug("8 CREANDO CARPETA PARA ARCHIVOS XML ************" + nuevo.toString());
					nuevo.mkdir();
					nuevo=new File(dirxml+dirempresas);
					log.debug("7 CREANDO CARPETAS POR EMPRESA ************" + nuevo.toString());
					nuevo.mkdir();
					for(int j=0; j<subDirectories.length; j++){
						nuevo = new File(dirxml+dirempresas+subDirectories[j]);
						log.debug("6 CREANDO SUBDIRECTORIO ************ "+nuevo.toString());
						nuevo.mkdir();
					}
				}
	    }
	
	public void run() {
		TXTReader tr;
		try {
			log.info("INICIO DE TXTController");
			log.info("Ultima Modificacion: 23/08/2011");
			readProperties(propertiesName);
			log.debug("properties.ini leido bien");
			crearCarpetasContenedoras(Helper.rutaarchivotxt);
			log.debug("metodo crearCarpetasContenedoras ejecutado bien");
			int iterador=0;
			Empresa empaux=null;
			ArrayList arr = new ArrayList();
			
			while (true) {
				/*log.debug("iterador: "+iterador);
				empaux=((Empresa)IntegracionSFTPMultiempresa.empresas.get(iterador));*/
				
					for(int i=0;i<IntegracionSFTPMultiempresa.empresas.size();i++){
						empaux=((Empresa)IntegracionSFTPMultiempresa.empresas.get(i));
						if(empaux.getESTADO().equalsIgnoreCase(Constantes.EMPRESAACTIVA)){
							tr = new TXTReader(empaux);
							//arr.add(tr);
							tr.start();
							tr.join();
							//sleep(tiempoEspera * 1000);
						}
						else
							log.debug("Empresa "+empaux.getRAZONSOCIAL()+" deshabilitada");
					}
					
					//for (int j = 0; j<arr.size(); j++){
					//	TXTReader objTXTReader = (TXTReader)arr.get(j);
					//	objTXTReader.start();
					//	objTXTReader.join();
					//}
					
					sleep(tiempoEspera * 1000);
				/*log.debug(" Ejecutando para "+empaux.getRAZONSOCIAL());
				iterador+=1;
				if(iterador==IntegracionSFTPMultiempresa.empresas.size())
					iterador=0;
				if(empaux.getESTADO().equalsIgnoreCase(Constantes.EMPRESAACTIVA)){
					tr = new TXTReader(empaux);
					tr.start();
					tr.join();
					sleep(tiempoEspera * 1000);
				}
				else
					log.debug("Empresa "+empaux.getRAZONSOCIAL()+" deshabilitada");*/
				
				
			}
		} catch (InterruptedException ie) {
			log.fatal(
				"ERROR: Terminacion de ejecucion Inesperada :" + ie);
		} catch (IOException ioe) {
			log.fatal("ERROR: Leyendo archivo de Propiedades :" + ioe);
		}
	}
}
